package com.cybertron.ironhide.spider;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.cybertron.ironhide.spider.domain.TaskUrl;
import com.cybertron.ironhide.spider.fetcher.FetchResult;
import com.cybertron.ironhide.spider.fetcher.Page;
import com.cybertron.ironhide.spider.task.Task;
import com.cybertron.ironhide.spider.xml.Site;

public interface SpiderListener {

	void onDigUrls(Thread thread, Task task, String fieldName,
			List<TaskUrl> urls);

	void onNewUrls(Thread thread, Task task, List<TaskUrl> newUrls);

	void onFetch(Thread thread, Task task, FetchResult result);

	void onDupRemoval(Thread currentThread, Task task,
			Collection<Task> validTasks);

	void onTaskSort(Thread currentThread, Task task,
			Collection<Task> afterSortTasks);

	void onNewTasks(Thread thread, Task task, Collection<Task> newTasks);

	void onTargetPage(Thread thread, Task task, Page page);

	void onParse(Thread thread, Task task, List<Map<String, Object>> models);

	void onPojo(Thread thread, Task task, List<Object> pojos);

	void onInfo(Thread thread, Task task, String info);

	void onError(Thread thread, Task task, String err, Throwable e);

	/**
	 * 调度结束后回调此方法
	 * 
	 * @date 2013-4-1 下午03:17:23
	 */
	void onAfterScheduleCancel();

	/**
	 * 每次调度执行前回调此方法
	 * 
	 * @date 2013-4-1 下午03:33:11
	 * @param theLastTimeScheduledAt
	 *            上一次调度时间
	 */
	void onBeforeEveryScheduleExecute(Date theLastTimeScheduledAt);

	/**
	 * 
	 * Spiderman.shutdown()被调用之前回调此方法
	 * 
	 * @date 2013-6-3 下午05:00:43
	 */
	void onBeforeShutdown();

	/**
	 * Spiderman.shutdown()被调用之后回调此方法
	 * 
	 * @date 2013-6-3 下午05:01:02
	 */
	void onAfterShutdown();

	/**
	 * 
	 * Spiderman.shutdown()被调用之前回调此方法
	 * 
	 * @date 2013-6-3 下午05:00:43
	 */
	void onBeforeShutdown(Site site);

	/**
	 * Spiderman.shutdown()被调用之后回调此方法
	 * 
	 * @date 2013-6-3 下午05:01:02
	 */
	void onAfterShutdown(Site site);
}
